package concurrent

/**
  WaitGroup 实现多协程之间同步
*/
import (
	"fmt"
	"sync"
)

func showMsg(i int) {
	fmt.Printf("i: %v\n", i)

	// 延迟执行,当方法退出时执行；
	defer wp.Done() // wp.add(-1)
}

var wp sync.WaitGroup

func main1() {
	for i := 0; i < 10; i++ {
		// 定义协程
		go showMsg(i)

		// 当
		wp.Add(1)
	}

	// 在并发编程时，当 wp.wait值为 0 时，
	// 表示当前主协程之内子协程执行完毕，才执行主协程结束
	wp.Wait()

	fmt.Print("退出主协程.....")
}
